//
// Created by aquawius on 25-3-12.
//

#ifndef CHOICE_SORT
#define CHOICE_SORT

#include <algorithm>
#include <iostream>
#include <random>

/**
 *
 */

// 不稳定的排序算法
// 比如： 3 5 5

// 1: 5 3 5
// 2: 5 5 3

void selectSort(int arr[], int size)
{
    for (int i = 0; i < size; i++) {
        // 这里targetPos需要为i，我开始的时候写成了targetPos = 0
        int targetPos = i;
        int min = arr[i];
        for (int j = i + 1; j < size; j++) {
            if (arr[j] < min) {
                min = arr[j];
                targetPos = j;
            }
        }
        std::swap(arr[i], arr[targetPos]);
    }
}

int main(int argc, char** argv)
{
    std::random_device rd;
    std::default_random_engine engine(rd());
    std::uniform_int_distribution<int> dis(0, 100);

    const auto arr = new int[100];

    for (int i = 0; i < 100; ++i) {
        arr[i] = dis(engine);
    }

    std::for_each(arr, arr + 100, [](const int a) { std::cout << a << ' '; });

    std::cout << std::endl;

    selectSort(arr, 100);

    std::for_each(arr, arr + 100, [](const int a) { std::cout << a << ' '; });

    // 释放动态分配的内存
    delete[] arr;

    return 0;
}

#endif // CHOICE_SORT
